<!DOCTYPE html>
<html>
  <head>
    <title>
      Test Oscillator Node: sawtooth
    </title>
    <script src="../../resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
    <script src="../resources/audit-util.js"></script>
    <script src="../resources/audit.js"></script>
    <script src="../resources/buffer-loader.js"></script>
    <script src="../resources/oscillator-testing.js"></script>
    <script src="../resources/audio-file-utils.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      // Create an offline context with a sample rate that is very different
      // from the sample rate used in the OscillatorTestingUtils.  This will
      // create a internal PeriodicWave objects for the Oscillator.  This should
      // not interfere with the oscillator test using a different context with a
      // different sample rate.

      audit.define('test', (task, should) => {
        let context0 = new OfflineAudioContext(1, 1, 3000);
        let osc = context0.createOscillator();
        osc.type = 'sawtooth';
        osc = null;

        // This test is identical to the test in osc-sawtooth-sweep-snr.html.
        let tester = OscillatorTestingUtils;

        let context = new OfflineAudioContext(
            1, tester.sampleRate * tester.lengthInSeconds, tester.sampleRate);
        // The thresholds are experimentally determined.
        tester.setThresholds({snr: 80.00, maxDiff: 4.06});
        tester.runTest(
            context, 'sawtooth', 'Sawtooth PeriodicWave Test', task, should);
      });

      audit.run();
    </script>
  </body>
</html>
